package es.indra.malaga.managedBeans;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.swing.text.NavigationFilter;

import es.indra.malaga.delegates.IAsignaturaDelegates;
import es.indra.malaga.servicios.IProfesorService;
import es.indra.malaga.servicios.IUsuarioService;
import es.indra.malaga.viewBeans.AsignaturaView;
import es.indra.malaga.viewBeans.ProfesorView;
import es.indra.malaga.viewBeans.UsuarioView;

public class ProfesorBean extends NavigationFilter {

	private IProfesorService profesorService;

	private IAsignaturaDelegates asignaturaDelegate;

	private IUsuarioService usuarioService;

	ProfesorView profesorView = new ProfesorView();

	private Integer codUsuario;

	private Integer codAsignatura;

	private Integer codUsuarioProfesor = 2;

	private List<ProfesorView> listadoProfesores;

	private List<AsignaturaView> listadoAsignaturas;

	private String URL_EDITAR_PROFESOR = "editarProfesor";

	private String URL_GUARDAR_PROFESORES = "guardarProfesor";

	private String URL_NUEVO_PROFESOR = "nuevoProfesor";

	private String URL_LISTADO_PROFESORES = "listadoProfesores";

	private int currentProfesorIndex;

	private final String ESTADO_ACTIVO = "ACTIVO";

	private final String USER_PROFESOR = "profesor";

	public ProfesorBean() {
	}

	public IProfesorService getProfesorService() {
		return profesorService;
	}

	public void setProfesorService(IProfesorService profesorService) {
		this.profesorService = profesorService;
	}

	public List<ProfesorView> getListadoProfesores() {
		return profesorService.listadoProfesores();
	}

	public String editarProfesor(String dni) {

		profesorView = listadoProfesores.get(currentProfesorIndex);
		setCodUsuario(profesorView.getUsuarioView().getIdUsuario());
		setCodAsignatura(getProfesorView().getAsignaturaView()
				.getCodAsignatura());
		profesorService.actualizarProfesor(profesorView);
		profesorView = new ProfesorView();
		currentProfesorIndex = 0;
		return "";
	}

	/**
	 * @return the profesorView
	 */
	public ProfesorView getProfesorView() {
		return profesorView;
	}

	/**
	 * @param profesorView
	 *            the profesorView to set
	 */
	public void setProfesorView(ProfesorView profesorView) {
		this.profesorView = profesorView;
	}

	public void setListadoProfesores(List<ProfesorView> listadoProfesores) {
		this.listadoProfesores = listadoProfesores;
	}

	public String guardarProfesor() {
		profesorView.setAsignaturaView(asignaturaDelegate
				.getAsignatura(codAsignatura));
		profesorView.setUsuarioView(usuarioService.getUsuario(codUsuario));
		profesorService.actualizarProfesor(profesorView);

		return URL_GUARDAR_PROFESORES;
	}

	public String nuevoProfesor() {
		return URL_NUEVO_PROFESOR;
	}

	public String insertarProfesor() {

		UsuarioView usuarioView = new UsuarioView();

		usuarioView.setEstado(ESTADO_ACTIVO);
		usuarioView.setFechaAlta(new SimpleDateFormat("dd/MM/yyyy")
				.format(new Date()));
		usuarioView.setLanguage("es");
		usuarioView.setRol(USER_PROFESOR);
		usuarioView.setUsername(profesorView.getDni());
		usuarioView.setPassword(profesorView.getDni());
		usuarioService.guardarUsuario(usuarioView);

		profesorView.setAsignaturaView(asignaturaDelegate
				.getAsignatura(codAsignatura));

		profesorView.setUsuarioView(usuarioService
				.getUsuarioByName(profesorView.getDni()));

		profesorService.saveProfesor(profesorView);
		return URL_GUARDAR_PROFESORES;
	}

	public Integer getCodUsuario() {
		return codUsuario;
	}

	public void setCodUsuario(Integer codUsuario) {
		this.codUsuario = codUsuario;
	}

	public IAsignaturaDelegates getAsignaturaDelegate() {
		return asignaturaDelegate;
	}

	public void setAsignaturaDelegate(IAsignaturaDelegates asignaturaDelegate) {
		this.asignaturaDelegate = asignaturaDelegate;
	}

	/**
	 * @return the listadoAsignaturas
	 */
	public List<AsignaturaView> getListadoAsignaturas() {
		return asignaturaDelegate.getListadoAsignaturas();
	}

	/**
	 * @param listadoAsignaturas
	 *            the listadoAsignaturas to set
	 */
	public void setListadoAsignaturas(List<AsignaturaView> listadoAsignaturas) {
		this.listadoAsignaturas = listadoAsignaturas;
	}

	/**
	 * @return the codAsignatura
	 */
	public Integer getCodAsignatura() {
		return codAsignatura;
	}

	/**
	 * @param codAsignatura
	 *            the codAsignatura to set
	 */
	public void setCodAsignatura(Integer codAsignatura) {
		this.codAsignatura = codAsignatura;
	}

	/**
	 * @return the usuarioService
	 */
	public IUsuarioService getUsuarioService() {
		return usuarioService;
	}

	/**
	 * @param usuarioService
	 *            the usuarioService to set
	 */
	public void setUsuarioService(IUsuarioService usuarioService) {
		this.usuarioService = usuarioService;
	}

	public String volverListado() {
		profesorView = new ProfesorView();

		return URL_LISTADO_PROFESORES;
	}

	public int getCurrentProfesorIndex() {
		return currentProfesorIndex;
	}

	public void setCurrentProfesorIndex(int currentProfesorIndex) {
		this.currentProfesorIndex = currentProfesorIndex;
	}

	public List<UsuarioView> getListadoUsuarios() {
		return usuarioService.getUsuarios();
	}

	public List<String> autocomplete(String prefix) {
		ArrayList<String> result = new ArrayList<String>();

		List<ProfesorView> profesorViews = profesorService
				.listadoProfesoresByName(prefix);

		Iterator<ProfesorView> iterator = profesorViews.iterator();

		while (iterator.hasNext()) {

			ProfesorView profesorView = iterator.next();

			result.add(profesorView.getNombre());

		}
		return result;
	}

}
